package com.kd.service.order;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kd.common.PageResult;
import com.kd.entity.Order;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
public interface OrderService extends IService<Order> {

    // 1. 基础CRUD操作
    Order getOrderById(Long oid);
    boolean insertOrder(Order order);
    boolean updateOrder(Order order);
    boolean deleteOrder(Long oid);

    // 2. 状态管理
//    boolean activateOrder(Integer oid, Integer operatorEid); // 0→1
//    boolean startProduction(Integer oid, Integer operatorEid); // 1→生产
//    boolean deliverOrder(Integer oid, Integer deliveryEid); // 1→2
//    boolean settleOrder(Integer oid, Integer settleEid); // 2→3
//    boolean cancelOrder(Integer oid, Integer operatorEid, String reason); // 取消状态：123→0

    // 3. 订单查询
    PageResult<Order,Long> findOrdersWithFilters(Long cursor, Integer limit,
                                            Long oid, Integer cid, Integer pid,
                                            Date startOrderDate, Date endOrderDate,
                                            Date startEta, Date endEta,
                                            BigDecimal minPrice, BigDecimal maxPrice,
                                            Integer status);
    PageResult<Order,Long> findOrdersWitheFilters(
            Long cursor, Integer limit,
            Long oid, Integer cid, Integer pid,
            Integer status);
    PageResult<Order,Long> findOrdersWithcFilters(
            Long cursor, Integer limit,
            Long oid, Integer cid, Integer pid,
            Integer status);
//    List<Order> getOrdersByCustomerId(Integer cid);
//    List<Order> getOrdersByProductId(Integer pid);
//    List<Order> getOrdersByStatus(Integer status);

    // 4. 业务方法
    BigDecimal calculateTotalAmount(BigDecimal price, Integer quantity);
//    boolean updateOrderPrice(Integer oid, BigDecimal newPrice, Integer operatorEid);
//    boolean updateOrderRemark(Integer oid, String remark);
//    boolean updateOrderEta(Integer oid, Date newEta);

    // 5. OID生成方法
    Long generateOrderId();



}
